javascript oop、instanceof 和基类
全部标签 我不太确定要使用的术语,但这是我的示例:classBase{public:virtualvoidtest()=0;};classMixin{public:virtualvoidtest(){}};classExample:publicBase,publicMixin{};intmain(intargc,char**argv){Exampleexample;example.test();return0;}我希望我的Mixin类实现纯虚函数Base::test,但是当我编译它时,它说:test.cpp:Infunction‘intmain(int,char**)’:test.cpp:15:
我在gcc4.4.5上尝试了以下代码。如果成员“data”不存在,代码执行正常,但在它存在的情况下,它会崩溃。当派生类的dtor不是虚拟时,它也不会崩溃。我知道在这两种情况下行为都是未定义的,如C++03(5.3.5/3)中所列,但仍然有人可以向我提供一些解释,为什么它在后一种情况下崩溃了?是的,我知道UB意味着任何事情都可能发生,但仍然我想知道特定于实现的细节。#includeusingstd::cout;structbase{intdata;base(){cout 最佳答案 假设在我的系统(gcc4.6.0,linuxx86_6
鉴于以下预先存在的框架,我需要找到好的设计模式来创建派生类的不同实例。我面临的主要挑战如下:challenge-1>每个类都有10多个字段,如何有效地将这些字段传递给派生类,再传递给基类。针对这个问题,我可以想出四个解决方案,但没有一个对我有吸引力。方法一>以简单格式传递所有参数classA::classA(intfield1,floatfield2,...,doublefield29)=>缺点:创建传入参数超过6~7个的函数不是一个好主意方法2>将所有参数作为结构传递structDataClassA{intfield1;floatfield2;...doublefield29;};s
如果我有以下类(class):classObject{...}classMyClass1:publicObject{...}classMyClass2:publicObject{...}和一个堆栈:std::stackstatesObjects;MyClass1c1;MyClass2c2;statesObjects.push(c1);//okaystatesObjects.push(c2);//okay如何在没有top()的情况下弹出它们并检索堆栈头部的元素(使用dynamic_cast),因为我在这里不使用指针? 最佳答案 简短的
考虑下面的代码:#includeusingnamespacestd;classA{public:A(){cout程序的输出如下:13571358因此,对于行Dd(d1)D的拷贝构造函数正在调用类。在继承过程中,我们需要显式调用基类的复制构造函数,否则只会调用基类的默认构造函数。到这里我才明白。我的问题:现在我想在Dd(d1)期间调用所有基类的复制构造函数执行。为此,如果我在下面尝试D(constD&obj):A(obj),B(obj),C(obj){cout然后我得到这个错误:错误:'classAA::A'isinaccessiblewithinthiscontext如何解决这个问题。
如何在C++中实现这个流畅的接口(interface):classBase{public:Base&add(intx){return*this;}}classDerived:publicBase{public:Derived&minus(intx){return*this;}}Derivedd;d.add(1).minus(2).add(3).minus(4);当前代码不工作,因为基类对派生类等一无所知。如果有提示/建议,我将不胜感激。 最佳答案 使基类模板化。使用所需的Base模板类型返回类型,如下所示:templateclass
我有一个基类和几个派生类。派生类使用一些公共(public)数据,我可以把这些公共(public)数据作为基类的保护成员吗?我知道protected成员有时会破坏封装,所以我想知道是否有什么好的方法。这是一个具体的例子:classBase{public:virtualvoidfoo()=0;voidprintData();protected:std::vectormData;}classDr1:publicBase{public:virtualvoidfoo();//couldchangemData}classDr2:publicBase{public:virtualvoidfoo()
我有一个基类classAnimal具有纯虚函数和一组派生类classMonkey:publicAnimalclassSnake:publicAnimal我想实现一个比较操作,这样,如果我在我的代码中遇到两个指向Animals的指针Animal*animal1Animal*animal2我可以将它们相互比较。如果animal1和animal2属于不同的派生类,比较结果应该是false。如果它们属于同一个派生类,则应返回比较运算符的输出。有人能告诉我实现这个的好方法吗? 最佳答案 哇,很多其他答案完全没有必要。dynamic_cast-
我有一个基类,它有两个同名但在2级继承中具有不同签名的函数。structA{virtualvoidf(int){}virtualvoidf(int,int){};virtualvoidf1(int){}};structB:publicA{};structC:publicB{voidf(int,int){}voidf1(int){}};intmain(){Cobj;obj.f1(0);obj.f(0,0);obj.f(0);//(1)cannotbefoundobj.B::f(0);//(2)works}我希望我的编译器(gcc-4.3.2)在(1)找到正确的定义,但我得到了g++mai
首先,我了解C++标准(ISO/IEC14882:2003):第11.5节第1段,但事实并非如此(但编译器显然不这么认为)。我尝试通过this指针在派生类方法中调用protected基类方法,静态转换为基类指针并在MSVC2008错误C2248:'A::f'中:无法访问类“A”中声明的protected成员。我必须在“奇怪的重复模板模式”的上下文中执行此操作,但我可以用更简单的代码重现此错误,如下所示:classB{protected:voidf(){}};classD:publicB{public:voidg(){f();//okthis->f();//okstatic_cast(t